package org.example;

import java.time.LocalDate;
import java.util.Objects;

public class Card {
    private String number;
    private String name;
    private LocalDate validityDate;
    private String cvc;
    private String type;
    private Boolean isPicture;

    /**
     * Конструктор по умолчанию
     */
    public Card() {

    }

    /**
     * Конструктор с параметрами
     *
     * @param number номер карты
     * @param name имя владельца карты
     * @param validityDate дата до которой действует карта
     * @param cvc номер на обратной стороне карты
     * @param type тип платежной системы
     * @param isPicture наличие индивидуального принта на карте
     */
    public Card(String number, String name, LocalDate validityDate, String cvc, String type, Boolean isPicture) {
        this.number = number;
        this.name = name;
        this.validityDate = validityDate;
        this.cvc = cvc;
        this.type = type;
        this.isPicture = isPicture;
    }

    @Override
    public String toString() {
        return "Card{" +
                "number='" + number + '\'' +
                ", name='" + name + '\'' +
                ", validityDate=" + validityDate +
                ", cvc='" + cvc + '\'' +
                ", type='" + type + '\'' +
                ", picture=" + isPicture +
                '}';
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDate getValidityDate() {
        return validityDate;
    }

    public void setValidityDate(LocalDate validityDate) {
        this.validityDate = validityDate;
    }

    public String getCvc() {
        return cvc;
    }

    public void setCvc(String cvc) {
        this.cvc = cvc;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Boolean getIsPicture() {
        return isPicture;
    }

    public void setIsPicture(Boolean isPicture) {
        this.isPicture = isPicture;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Card card = (Card) o;
        return Objects.equals(number, card.number) && Objects.equals(name, card.name) && Objects.equals(validityDate, card.validityDate) && Objects.equals(cvc, card.cvc) && Objects.equals(type, card.type) && Objects.equals(isPicture, card.isPicture);
    }

    @Override
    public int hashCode() {
        return Objects.hash(number, name, validityDate, cvc, type, isPicture);
    }
}
